# ============================================================================
# 钢筋混凝土GPU求解器测试 - 验证材料参数传递
# ============================================================================

wipe
puts "钢筋混凝土GPU求解器参数传递测试"

model basic -ndm 2 -ndf 2

# ============================================================================
# 简单测试模型: 单个Quad单元
# ============================================================================

set L 1.0
node 1 0.0 0.0
node 2 $L  0.0
node 3 $L  $L
node 4 0.0 $L

# ============================================================================
# 弹性各向同性材料 - 混凝土参数
# ============================================================================

# C30混凝土: E=30GPa, nu=0.2
nDMaterial ElasticIsotropic 1 30.0e9 0.2 2400.0

puts "定义材料: ElasticIsotropic, E=30 GPa, nu=0.2, rho=2400 kg/m³"

# ============================================================================
# 创建Quad单元
# ============================================================================

set thickness 0.2
element quad 1 1 2 3 4 $thickness "PlaneStress" 1

puts "创建Quad单元, 厚度=${thickness}m"

# ============================================================================
# 边界条件
# ============================================================================

# 节点1完全固定
fix 1 1 1
# 节点2完全固定
fix 2 1 1
# 节点4: X固定，Y自由
fix 4 1 0
# 节点3: X固定，Y自由 (修复刚体运动问题)
fix 3 1 0

# 顶部节点施加载荷
pattern Plain 1 Linear {
    # 减小载荷避免过大变形
    load 3 0.0 -1000.0
}

# ============================================================================
# GPU求解器测试
# ============================================================================

puts "\n=== GPU求解器测试 (启用调试输出) ==="

constraints Plain
numberer Plain
system GPUSolver -debugLevel 2 -enableModule matrixAssembly
test NormDispIncr 1.0e-6 10
algorithm Newton
integrator LoadControl 1.0
analysis Static

puts "\n运行GPU分析..."
set ok [analyze 1]

if {$ok == 0} {
    puts "✓ GPU分析成功完成"
    puts "节点3位移: [nodeDisp 3 1] [nodeDisp 3 2]"
} else {
    puts "❌ GPU分析失败"
}

# ============================================================================
# 检查GPU调试输出
# ============================================================================

puts "\n=========================================="
puts "检查GPU调试输出 (上方):"
puts "=========================================="
puts "应该看到:"
puts "  Quad\[1\] material from tcl: E=3e+10, nu=0.2, t=0.2, rho=2400"
puts ""
puts "如果看到该输出, 说明材料参数成功从tcl传递到GPU!"
puts "如果看到默认值警告, 说明参数传递失败"
puts "=========================================="

wipe
